module rgb2gray( 
    input				sys_clk,    //pclk
    input				sys_rst_n,  //复位信号
    input		[23:0]	rgb_din,    //rgb数据输入

    output		[7:0]	gray_dout   //灰度转换输出
);								                  
    //中间信号定义		 
    wire	    [7:0]	r         ;//rgb888
    wire	    [7:0]	g         ;//rgb888
    wire        [7:0]   b         ;//rgb888
    reg         [14:0]  r_u       ;//灰度转换运算寄存
    reg         [14:0]  g_u       ;//灰度转换运算寄存
    reg         [14:0]  b_u       ;//灰度转换运算寄存
    reg         [14:0]  u_out     ;//运算和寄存

    assign r = {rgb_din[23:16]};
    assign g = {rgb_din[15:8]};
    assign b = {rgb_din[7:0]};

    //7位精度的灰度转换运算
    always @(posedge sys_clk or negedge sys_rst_n)begin 
        if(!sys_rst_n)begin
            r_u <= 15'b0; 
            g_u <= 15'b0; 
            b_u <= 15'b0;
        end 
        else begin 
            r_u <= r*7'd38; 
            g_u <= g*7'd75; 
            b_u <= b*7'd15;
        end 
    end

    //u_out:运算和
    always @(posedge sys_clk or negedge sys_rst_n)begin 
        if(!sys_rst_n)begin
            u_out <= 15'b0;
        end 
        else begin 
            u_out <= r_u + g_u + b_u;
        end 
    end

    //gray_dout:灰度转换结果
    assign gray_dout = u_out[7 +:8];
                        
endmodule
